package com.thinkgem.jeesite.modules.wechat.utils;

import com.thinkgem.jeesite.common.config.Global;
import com.thinkgem.jeesite.common.mapper.JsonMapper;
import com.thinkgem.jeesite.common.utils.StringUtils;
import com.thinkgem.jeesite.modules.wechat.entity.WechatApiToken;
import com.xiaoleilu.hutool.http.HttpUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.HashMap;
import java.util.Map;

public class OauthUtils extends Global{


	private static Logger logger = LoggerFactory.getLogger(OauthUtils.class);

	/**
	 * access_token	网页授权接口调用凭证,注意：此access_token与基础支持的access_token不同
	 * expires_in	access_token接口调用凭证超时时间，单位（秒）
	 * refresh_token	用户刷新access_token
	 * openid	用户唯一标识
	 * scope	用户授权的作用域，使用逗号（,）分隔
	 * @param code
	 * @return
	 */
	public static Map<String,Object> getSnsToken(String code){
		HashMap<String, Object> paramMap = new HashMap<>();
		paramMap.put("grant_type", "authorization_code");
		paramMap.put("appid", appId);
		paramMap.put("secret", secret);
		paramMap.put("code", code);
		String json = HttpUtil.get("https://api.weixin.qq.com/sns/oauth2/access_token", paramMap);
		logger.info(json);
		Map<String,Object> map = (Map<String, Object>) JsonMapper.fromJsonString(json, HashMap.class);
		Integer errcode = (Integer) map.get("errcode");
		//如果请求失败则返回null
		if(errcode != null){
			return null;
		}
		return map;
	}

	/**
	 * 获取用户信息
	 * openid	用户的唯一标识
	 * nickname	用户昵称
	 * sex	用户的性别，值为1时是男性，值为2时是女性，值为0时是未知
	 * province	用户个人资料填写的省份
	 * city	普通用户个人资料填写的城市
	 * country	国家，如中国为CN
	 * headimgurl	用户头像，最后一个数值代表正方形头像大小（有0、46、64、96、132数值可选，0代表640*640正方形头像），用户没有头像时该项为空。若用户更换头像，原有头像URL将失效。
	 * privilege	用户特权信息，json 数组，如微信沃卡用户为（chinaunicom）
	 * unionid	只有在用户将公众号绑定到微信开放平台帐号后，才会出现该字段。
	 * @param token
	 * @param openId
	 * @return
	 */
	public static Map<String,Object> getSnsUserinfo(String token,String openId){
		HashMap<String, Object> paramMap = new HashMap<>();
		paramMap.put("access_token", token);
		paramMap.put("openid", openId);
		paramMap.put("lang", "zh_CN");
		String json = HttpUtil.get("https://api.weixin.qq.com/sns/userinfo", paramMap);
		logger.info(json);
		Map<String,Object> map = (Map<String, Object>) JsonMapper.fromJsonString(json, HashMap.class);
		Integer errcode = (Integer) map.get("errcode");
		//如果请求失败则返回null
		if(errcode != null){
			return null;
		}
		return map;
	}

}
